#!/usr/bin/env python
# coding: utf-8

# # 微软的Azure的人脸识别

# ## 第一部分 单人照片
# 
# 以下图为例
# 
# ![first](https://aip.bdstatic.com/portal-pc-node/dist/1593692399322/images/technology/body/driver/4.jpg)

# In[1]:


# 先导入为们需要的模块
import requests


# In[2]:


# 这里写下你的Azure的API_key
KEY = '64aba11e6e3f4e2b8de0e318553a9a21'


# In[3]:


BASE_URL = 'https://eastus.api.cognitive.microsoft.com/face/v1.0/detect' # 人脸检测


# In[12]:


# 沿用API的示范代碼，{subscription key}用KEY代入
HEADERS = {
    # Request headers
    'Content-Type': 'application/json',
    'Ocp-Apim-Subscription-Key': '{}'.format(KEY), #''  
}

img_url = 'https://aip.bdstatic.com/portal-pc-node/dist/1593692399322/images/technology/body/driver/4.jpg'


# In[13]:


data = {
    'url': '{}'.format(img_url),
}
payload = {
    'returnFaceId': 'true',
    'returnFaceLandmarks': 'flase',
    'returnFaceAttributes': '{}'.format('age,gender,glasses,emotion'), 
}


# In[14]:


import json
r = requests.post(BASE_URL,data=json.dumps(data),params = payload,headers=HEADERS)


# In[15]:


r.status_code


# In[16]:


r.content


# In[17]:


results = r.json()
results


# In[25]:


import pandas as pd

df_ax = pd.json_normalize(results)

df_ax


# In[26]:


df_ax = df_ax.rename (columns = {"faceAttributes.gender":"性别",
                                 "faceAttributes.age":"年龄",
                                 "faceAttributes.glasses":"眼镜",
                                 "faceAttributes.emotion.anger":"愤怒",
                                 "faceAttributes.emotion.contempt":"蔑视",
                                 "faceAttributes.emotion.disgust":"厌恶",
                                 
                                 "faceAttributes.emotion.fear":"恐惧",
                                 "faceAttributes.emotion.happiness":"高兴",
                                 "faceAttributes.emotion.neutral":"平静",
                                 "faceAttributes.emotion.sadness":"悲伤",
                                 "faceAttributes.emotion.surprise":"紧张",
                                 "faceRectangle.height":"脸型高度"})
#df_ax = df_ax.set_index('FaceId')
df_ax = df_ax.iloc[:,4:]
df_ax.replace({"male":"男性",
               "female":"女性",
               "NoGlasses":"没戴眼镜",
               "ReadingGlasses":"戴眼镜",})


# ## 根据上述的值，图中女生最有可能的情绪是平静（0.976）、高兴（0.017）、蔑视（0.004）

# ## 第二部分 多人照片
# 
# 以下图为例
# 
# ![second](http://newmedia.nfu.edu.cn/wcy/wp-content/uploads/2018/04/post_20180424__NFU_DoraHacks_imoji%E5%9B%A2%E9%98%9F.jpg)

# In[1]:


# 先导入为们需要的模块
import requests


# In[2]:


# 这里写下你的Azure的API_key
KEY = '64aba11e6e3f4e2b8de0e318553a9a21'


# In[3]:


BASE_URL = 'https://eastus.api.cognitive.microsoft.com/face/v1.0/detect' # 人脸检测


# In[4]:


# 沿用API的示范代碼，{subscription key}用KEY代入
HEADERS = {
    # Request headers
    'Content-Type': 'application/json',
    'Ocp-Apim-Subscription-Key': '{}'.format(KEY), #''  
}

img_url = 'http://newmedia.nfu.edu.cn/wcy/wp-content/uploads/2018/04/post_20180424__NFU_DoraHacks_imoji%E5%9B%A2%E9%98%9F.jpg'


# In[5]:


data = {
    'url': '{}'.format(img_url),
}
payload = {
    'returnFaceId': 'true',
    'returnFaceLandmarks': 'flase',
    'returnFaceAttributes': '{}'.format('age,gender,glasses,emotion'), 
}


# In[6]:


import json
r = requests.post(BASE_URL,data=json.dumps(data),params = payload,headers=HEADERS)


# In[7]:


r.status_code


# In[8]:


r.content


# In[9]:


results = r.json()
results


# In[10]:


import pandas as pd

df_ax = pd.json_normalize(results)

df_ax


# In[11]:


df_ax = df_ax.rename (columns = {"faceAttributes.gender":"性别",
                                 "faceAttributes.age":"年龄",
                                 "faceAttributes.glasses":"眼镜",
                                 "faceAttributes.emotion.anger":"愤怒",
                                 "faceAttributes.emotion.contempt":"蔑视",
                                 "faceAttributes.emotion.disgust":"厌恶",
                                 "faceAttributes.emotion.fear":"恐惧",
                                 "faceAttributes.emotion.happiness":"高兴",
                                 "faceAttributes.emotion.neutral":"平静",
                                 "faceAttributes.emotion.sadness":"悲伤",
                                 "faceAttributes.emotion.surprise":"惊讶",
                                 "faceRectangle.height":"脸型高度"})
#df_ax = df_ax.set_index('FaceId')
df_ax = df_ax.iloc[:,4:]
df_ax.replace({"male":"男性",
               "female":"女性",
               "NoGlasses":"没戴眼镜",
               "ReadingGlasses":"戴眼镜",})


# ## 第二张多人照片

# 以下图为例
# ![thrid](http://i1.go2yd.com/image.php?url=0KcZIhhL4T)

# In[147]:


# 先导入为们需要的模块
import requests


# In[148]:


# 这里写下你的Azure的API_key
KEY = '64aba11e6e3f4e2b8de0e318553a9a21'


# In[149]:


BASE_URL = 'https://eastus.api.cognitive.microsoft.com/face/v1.0/detect' # 人脸检测


# In[150]:


# 沿用API的示范代碼，{subscription key}用KEY代入
HEADERS = {
    # Request headers
    'Content-Type': 'application/json',
    'Ocp-Apim-Subscription-Key': '{}'.format(KEY), #''  
}

img_url = 'http://i1.go2yd.com/image.php?url=0KcZIhhL4T'


# In[151]:


data = {
    'url': '{}'.format(img_url),
}
payload = {
    'returnFaceId': 'true',
    'returnFaceLandmarks': 'flase',
    'returnFaceAttributes': '{}'.format('age,gender,glasses,emotion'), 
}


# In[152]:


import json
r = requests.post(BASE_URL,data=json.dumps(data),params = payload,headers=HEADERS)


# In[153]:


r.status_code


# In[154]:


r.content


# In[155]:


results = r.json()
results


# In[156]:


import pandas as pd

df_ax = pd.json_normalize(results)

df_ax


# In[157]:


df_ax = df_ax.rename (columns = {"faceAttributes.gender":"性别",
                                 "faceAttributes.age":"年龄",
                                 "faceAttributes.glasses":"眼镜",
                                 "faceAttributes.emotion.anger":"愤怒",
                                 "faceAttributes.emotion.contempt":"蔑视",
                                 "faceAttributes.emotion.disgust":"厌恶",
                                 "faceAttributes.emotion.fear":"恐惧",
                                 "faceAttributes.emotion.happiness":"高兴",
                                 "faceAttributes.emotion.neutral":"平静",
                                 "faceAttributes.emotion.sadness":"悲伤",
                                 "faceAttributes.emotion.surprise":"惊讶",
                                 "faceRectangle.height":"脸型高度"})
#df_ax = df_ax.set_index('FaceId')
df_ax = df_ax.iloc[:,4:]
df_ax.replace({"male":"男性",
               "female":"女性",
               "NoGlasses":"没戴眼镜",
               "ReadingGlasses":"戴眼镜",})


# # 接下来我来试试第二家的 face++

# ## face++ 使用教程

# ## 第一部分单人照片
# 
# 以下图为例
# ![first](https://p2.ssl.qhimgs1.com/bdr/326__/t01c26515f619902f48.jpg)

# In[164]:


# 1、先导入为们需要的模块
import requests


api_secret = "3r99_ruQTS-_p8nnBh2hayEVmWvow61K"
# 2、输入我们API_Key
api_key = 'VZWbKT6KtROk-qVCNlsnAUAL9obMVtrv'  # Replace with a valid Subscription Key here.


# 3、目标url
# 这里也可以使用本地图片 例如：filepath ="image/tupian.jpg"
BASE_URL = 'https://api-cn.faceplusplus.com/facepp/v3/detect' 
img_url = 'https://p2.ssl.qhimgs1.com/bdr/326__/t01c26515f619902f48.jpg'

# 4、沿用API文档的示范代码,准备我们的headers和图片(数据)

headers = {
    'Content-Type': 'application/json',
}

# 5、准备symbol ? 后面的数据

payload = {
    "image_url":img_url,
    'api_key': api_key,
    'api_secret': api_secret,
    'return_attributes':'gender,age,smiling,emotion', 
}


# In[165]:


#  6、requests发送我们请求
r = requests.post(BASE_URL, params=payload, headers=headers)


# In[166]:


r.status_code


# In[167]:


r.content


# In[168]:


results = r.json()
results


# In[186]:


import pandas as pd

from pandas.io.json import json_normalize

df_ax=json_normalize(results,record_path='faces')

df_ax


# In[187]:


df_ax = df_ax.rename (columns = {"face_token":"",
                                 "attributes.gender.value":"性别",
                                 "attributes.age.value":"年龄",
                                 "face_rectangle.top":"面部最高点",
                                 "face_rectangle.left":"面部最左点",
                                 "face_rectangle.width":"面部宽度",
                                 "face_rectangle.height":"面部高度",
                                 "attributes.gender.value":"性别",
                                 "attributes.smile.value":"微笑",
                                 "attributes.smile.threshold":"微笑阈值",
                                 "attributes.emotion.anger":"愤怒",
                                 "attributes.emotion.disgust":"厌恶",
                                 "attributes.emotion.fear":"恐惧",
                                 "attributes.emotion.happiness":"开心",
                                 "attributes.emotion.neutral":"平静",
                                 "attributes.emotion.sadness":"悲伤",
                                 "attributes.emotion.surprise":"惊喜",
                                                                                                  
                                 
                                 
                                 })
#df_ax = df_ax.set_index('FaceId')
df_ax = df_ax.iloc[:,4:]
df_ax.replace({"Male":"男性",
               "Female":"女性",
                 })


# ## 第二部分 多人照片
# 
# 以下图为例
# 
# ![second](http://newmedia.nfu.edu.cn/wcy/wp-content/uploads/2018/04/post_20180424__NFU_DoraHacks_imoji%E5%9B%A2%E9%98%9F.jpg)

# In[188]:


# 1、先导入为们需要的模块
import requests


api_secret = "3r99_ruQTS-_p8nnBh2hayEVmWvow61K"
# 2、输入我们API_Key
api_key = 'VZWbKT6KtROk-qVCNlsnAUAL9obMVtrv'  # Replace with a valid Subscription Key here.


# 3、目标url
# 这里也可以使用本地图片 例如：filepath ="image/tupian.jpg"
BASE_URL = 'https://api-cn.faceplusplus.com/facepp/v3/detect' 
img_url = 'http://newmedia.nfu.edu.cn/wcy/wp-content/uploads/2018/04/post_20180424__NFU_DoraHacks_imoji%E5%9B%A2%E9%98%9F.jpg'

# 4、沿用API文档的示范代码,准备我们的headers和图片(数据)

headers = {
    'Content-Type': 'application/json',
}

# 5、准备symbol ? 后面的数据

payload = {
    "image_url":img_url,
    'api_key': api_key,
    'api_secret': api_secret,
    'return_attributes':'gender,age,smiling,emotion', 
}


# In[189]:


#  6、requests发送我们请求
r = requests.post(BASE_URL, params=payload, headers=headers)


# In[195]:


r.status_code


# In[196]:


r.content


# In[197]:


results = r.json()
results


# In[219]:


import pandas as pd

from pandas.io.json import json_normalize

df_ax=json_normalize(results,record_path='faces')

df_ax


# In[220]:


df_ax = df_ax.rename (columns = {"face_token":"",
                                 "attributes.gender.value":"性别",
                                 "attributes.age.value":"年龄",
                                 "face_rectangle.top":"面部最高点",
                                 "face_rectangle.left":"面部最左点",
                                 "face_rectangle.width":"面部宽度",
                                 "face_rectangle.height":"面部高度",
                                 "attributes.gender.value":"性别",
                                 "attributes.smile.value":"微笑",
                                 "attributes.smile.threshold":"微笑阈值",
                                 "attributes.emotion.anger":"愤怒",
                                 "attributes.emotion.disgust":"厌恶",
                                 "attributes.emotion.fear":"恐惧",
                                 "attributes.emotion.happiness":"开心",
                                 "attributes.emotion.neutral":"平静",
                                 "attributes.emotion.sadness":"悲伤",
                                 "attributes.emotion.surprise":"惊喜",
                                                                                                  
                                 
                                 
                                 })
#df_ax = df_ax.set_index('FaceId')
df_ax = df_ax.iloc[:,4:]
df_ax.replace({"Male":"男性",
               "Female":"女性",
                 })


# ## 第二组多人照片

# ## 第二部分 多人照片
# 
# 以下图为例
# 
# ![thrid](http://i1.go2yd.com/image.php?url=0KcZIhhL4T)

# In[223]:


# 1、先导入为们需要的模块
import requests


api_secret = "3r99_ruQTS-_p8nnBh2hayEVmWvow61K"
# 2、输入我们API_Key
api_key = 'VZWbKT6KtROk-qVCNlsnAUAL9obMVtrv'  # Replace with a valid Subscription Key here.


# 3、目标url
# 这里也可以使用本地图片 例如：filepath ="image/tupian.jpg"
BASE_URL = 'https://api-cn.faceplusplus.com/facepp/v3/detect' 
img_url = 'http://i1.go2yd.com/image.php?url=0KcZIhhL4T'

# 4、沿用API文档的示范代码,准备我们的headers和图片(数据)

headers = {
    'Content-Type': 'application/json',
}

# 5、准备symbol ? 后面的数据

payload = {
    "image_url":img_url,
    'api_key': api_key,
    'api_secret': api_secret,
    'return_attributes':'gender,age,smiling,emotion', 
}


# In[224]:


#  6、requests发送我们请求
r = requests.post(BASE_URL, params=payload, headers=headers)


# In[225]:


r.status_code


# In[226]:


r.content


# In[227]:


results = r.json()
results


# In[228]:


import pandas as pd

from pandas.io.json import json_normalize

df_ax=json_normalize(results,record_path='faces')

df_ax


# In[229]:


df_ax = df_ax.rename (columns = {"face_token":"",
                                 "attributes.gender.value":"性别",
                                 "attributes.age.value":"年龄",
                                 "face_rectangle.top":"面部最高点",
                                 "face_rectangle.left":"面部最左点",
                                 "face_rectangle.width":"面部宽度",
                                 "face_rectangle.height":"面部高度",
                                 "attributes.gender.value":"性别",
                                 "attributes.smile.value":"微笑",
                                 "attributes.smile.threshold":"微笑阈值",
                                 "attributes.emotion.anger":"愤怒",
                                 "attributes.emotion.disgust":"厌恶",
                                 "attributes.emotion.fear":"恐惧",
                                 "attributes.emotion.happiness":"开心",
                                 "attributes.emotion.neutral":"平静",
                                 "attributes.emotion.sadness":"悲伤",
                                 "attributes.emotion.surprise":"惊喜",
                                                                                                  
                                 
                                 
                                 })
#df_ax = df_ax.set_index('FaceId')
df_ax = df_ax.iloc[:,4:]
df_ax.replace({"Male":"男性",
               "Female":"女性",
                 })


# # 接下来，使用第三家的API_科大讯飞

# ## 科大讯飞的人脸识别中年龄、性别和表情文档是分开，是需要分别引用的，十分复杂。

# ## 第一部分，单人照片
# 以下图为例
# 

# In[253]:


from IPython.core.display import display,HTML   #使用ipython展示模块
display(HTML('<img src="https://p2.ssl.qhimgs1.com/bdr/326__/t01c26515f619902f48.jpg" alt="">'))


# ## 年龄分析

# In[261]:


# -*- coding: utf-8 -*-
import requests
import time
import hashlib
import base64
import pprint
""" 
  人脸特征分析年龄WebAPI接口调用示例接口文档(必看)：https://doc.xfyun.cn/rest_api/%E4%BA%BA%E8%84%B8%E7%89%B9%E5%BE%81%E5%88%86%E6%9E%90-%E5%B9%B4%E9%BE%84.html
  图片属性：png、jpg、jpeg、bmp、tif图片大小不超过800k
  (Very Important)创建完webapi应用添加服务之后一定要设置ip白名单，找到控制台--我的应用--设置ip白名单，如何设置参考：http://bbs.xfyun.cn/forum.php?mod=viewthread&tid=41891
  错误码链接：https://www.xfyun.cn/document/error-code (code返回错误码时必看)
  @author iflytek
"""
# 人脸特征分析年龄webapi接口地址
URL = "http://tupapi.xfyun.cn/v1/age"
# 应用ID  (必须为webapi类型应用，并人脸特征分析服务，参考帖子如何创建一个webapi应用：http://bbs.xfyun.cn/forum.php?mod=viewthread&tid=36481)
APPID = "5e844085"
# 接口密钥(webapi类型应用开通人脸特征分析服务后，控制台--我的应用---人脸特征分析---服务的apikey)
API_KEY = "f0d9fd8e7026e127e52adc87d528ac76"
ImageName = "first.jpg"
ImageUrl = "https://p2.ssl.qhimgs1.com/bdr/326__/t01c26515f619902f48.jpg"
# 图片数据可以通过两种方式上传，第一种在请求头设置image_url参数，第二种将图片二进制数据写入请求体中。若同时设置，以第一种为准。
# 此demo使用第一种方式进行上传图片地址，如果想使用第二种方式，将图片二进制数据写入请求体即可。
# FilePath = r"C:\Users\Admin\Desktop\1539656523.png"


def getHeader(image_name, image_url=None):
    curTime = str(int(time.time()))
    param = "{\"image_name\":\"" + image_name + "\",\"image_url\":\"" + image_url + "\"}"
    paramBase64 = base64.b64encode(param.encode('utf-8'))
    tmp = str(paramBase64, 'utf-8')

    m2 = hashlib.md5()
    m2.update((API_KEY + curTime + tmp).encode('utf-8'))
    checkSum = m2.hexdigest()

    header = {
        'X-CurTime': curTime,
        'X-Param': paramBase64,
        'X-Appid': APPID,
        'X-CheckSum': checkSum,
    }
    return header


# def getBody(filePath):
#     binfile = open(filePath, 'rb')
#     data = binfile.read()
#     return data


r = requests.post(URL, headers=getHeader(ImageName, ImageUrl))
result=r.json()
#pprint.pprint(result)

results=int(result['data']['fileList'][0]['label'])
#labels=result['data']['fileList'][0]['labels']
results
age={
0:'0-1', 
1:'2-5', 
2:'6-10',  
3:'11-15', 
4:'16-20', 
5:'21-25', 
6:'31-40',
7:'41-50', 
8:'51-60',
9:'61-80',
10:'80以上',
11:'其他',
12:'26-30',    
}
if results in age.keys():
    if 11 == results:
        print('这个人的年龄不清楚')
    else:        
        print('这个人物大约在',age[results],'岁')


# In[275]:


# -*- coding: utf-8 -*-
import requests
import time
import hashlib
import base64
""" 
  人脸特征分析性别WebAPI接口调用示例接口文档(必看)：https://doc.xfyun.cn/rest_api/%E4%BA%BA%E8%84%B8%E7%89%B9%E5%BE%81%E5%88%86%E6%9E%90-%E6%80%A7%E5%88%AB.html
  图片属性：png、jpg、jpeg、bmp、tif图片大小不超过800k
  (Very Important)创建完webapi应用添加服务之后一定要设置ip白名单，找到控制台--我的应用--设置ip白名单，如何设置参考：http://bbs.xfyun.cn/forum.php?mod=viewthread&tid=41891
  错误码链接：https://www.xfyun.cn/document/error-code (code返回错误码时必看)
  @author iflytek
"""
# 人脸特征分析性别webapi接口地址
URL = "http://tupapi.xfyun.cn/v1/sex"

# 应用ID  (必须为webapi类型应用，并人脸特征分析服务，参考帖子如何创建一个webapi应用：http://bbs.xfyun.cn/forum.php?mod=viewthread&tid=36481)
APPID = "5e844085"
# 接口密钥(webapi类型应用开通人脸特征分析服务后，控制台--我的应用---人脸特征分析---服务的apikey)
API_KEY = "f0d9fd8e7026e127e52adc87d528ac76"
ImageName = "first.jpg"
#图片数据可以通过两种方式上传，第一种在请求头设置image_url参数，第二种将图片二进制数据写入请求体中。若同时设置，以第一种为准。
#此demo使用第一种方式进行上传图片地址，如果想使用第二种方式，将图片二进制数据写入请求体即可。
ImageUrl = "https://p2.ssl.qhimgs1.com/bdr/326__/t01c26515f619902f48.jpg"
# FilePath = r"C:\Users\Admin\Desktop\1539656523.png"
def getHeader(image_name, image_url=None):
    curTime = str(int(time.time()))
    param = "{\"image_name\":\"" + image_name + "\",\"image_url\":\"" + image_url + "\"}"
    paramBase64 = base64.b64encode(param.encode('utf-8'))
    tmp = str(paramBase64, 'utf-8')

    m2 = hashlib.md5()
    m2.update((API_KEY + curTime + tmp).encode('utf-8'))
    checkSum = m2.hexdigest()

    header = {
        'X-CurTime': curTime,
        'X-Param': paramBase64,
        'X-Appid': APPID,
        'X-CheckSum': checkSum,
    }
    return header


# def getBody(filePath):
#     binfile = open(filePath, 'rb')
#     data = binfile.read()
#     return data


r = requests.post(URL, headers=getHeader(ImageName, ImageUrl))
result=r.json()
results=result['data']['fileList'][0]['label']
sex={
    0:'男人',
    1:'女人',
    2:'难以辨认',
    3:'多人'
}
if int(results) in sex.keys():
    e = int(results)
    print('这个人是',sex[e])


# In[264]:


# -*- coding: utf-8 -*-
import requests
import time
import hashlib
import base64
import pprint 
""" 
  人脸特征分析表情WebAPI接口调用示例接口文档(必看)：https://doc.xfyun.cn/rest_api/%E4%BA%BA%E8%84%B8%E7%89%B9%E5%BE%81%E5%88%86%E6%9E%90-%E8%A1%A8%E6%83%85.html
  图片属性：png、jpg、jpeg、bmp、tif图片大小不超过800k
  (Very Important)创建完webapi应用添加服务之后一定要设置ip白名单，找到控制台--我的应用--设置ip白名单，如何设置参考：http://bbs.xfyun.cn/forum.php?mod=viewthread&tid=41891
  错误码链接：https://www.xfyun.cn/document/error-code (code返回错误码时必看)
  @author iflytek
"""
# 人脸特征分析表情webapi接口地址
URL = "http://tupapi.xfyun.cn/v1/expression"
# 应用ID  (必须为webapi类型应用，并人脸特征分析服务，参考帖子如何创建一个webapi应用：http://bbs.xfyun.cn/forum.php?mod=viewthread&tid=36481)
APPID = "5e844085"
# 接口密钥(webapi类型应用开通人脸特征分析服务后，控制台--我的应用---人脸特征分析---服务的apikey)
API_KEY = "f0d9fd8e7026e127e52adc87d528ac76"
ImageName = "first.jpg"
ImageUrl = "https://wx4.sinaimg.cn/mw690/5033b6dbly1gax1zx7404j20u016f7hc.jpg"
# FilePath = r"C:\Users\Admin\Desktop\1539656523.png"
# 图片数据可以通过两种方式上传，第一种在请求头设置image_url参数，第二种将图片二进制数据写入请求体中。若同时设置，以第一种为准。
# 此demo使用第一种方式进行上传图片地址，如果想使用第二种方式，将图片二进制数据写入请求体即可。
def getHeader(image_name, image_url=None):
    curTime = str(int(time.time()))
    param = "{\"image_name\":\"" + image_name + "\",\"image_url\":\"" + image_url + "\"}"
    paramBase64 = base64.b64encode(param.encode('utf-8'))
    tmp = str(paramBase64, 'utf-8')
    m2 = hashlib.md5()
    m2.update((API_KEY + curTime + tmp).encode('utf-8'))
    checkSum = m2.hexdigest()

    header = {
        'X-CurTime': curTime,
        'X-Param': paramBase64,
        'X-Appid': APPID,
        'X-CheckSum': checkSum,
    }
    return header


# def getBody(filePath):
#     binfile = open(filePath, 'rb')
#     data = binfile.read()
#     return data


r = requests.post(URL, headers=getHeader(ImageName, ImageUrl))
result=r.json()
results=result['data']['fileList'][0]['label']
expression={
    0:'其他(非人脸表情图片)',
    1:'其他表情',
    2:'喜悦',
    3:'愤怒',
    4:'悲伤',
    5:'惊恐',
    6:'厌恶',
    7:'中性'
}
if int(results) in expression.keys():
    e=int(results)
    print('图中人物的表情是',expression[e])


# ## 第二部分多人照片

# In[270]:


from IPython.core.display import display,HTML   #使用ipython展示模块
display(HTML('<img src="http://newmedia.nfu.edu.cn/wcy/wp-content/uploads/2018/04/post_20180424__NFU_DoraHacks_imoji%E5%9B%A2%E9%98%9F.jpg" alt="">'))


# ## 人物年龄

# In[276]:


# -*- coding: utf-8 -*-
import requests
import time
import hashlib
import base64
import pprint
""" 
  人脸特征分析年龄WebAPI接口调用示例接口文档(必看)：https://doc.xfyun.cn/rest_api/%E4%BA%BA%E8%84%B8%E7%89%B9%E5%BE%81%E5%88%86%E6%9E%90-%E5%B9%B4%E9%BE%84.html
  图片属性：png、jpg、jpeg、bmp、tif图片大小不超过800k
  (Very Important)创建完webapi应用添加服务之后一定要设置ip白名单，找到控制台--我的应用--设置ip白名单，如何设置参考：http://bbs.xfyun.cn/forum.php?mod=viewthread&tid=41891
  错误码链接：https://www.xfyun.cn/document/error-code (code返回错误码时必看)
  @author iflytek
"""
# 人脸特征分析年龄webapi接口地址
URL = "http://tupapi.xfyun.cn/v1/age"
# 应用ID  (必须为webapi类型应用，并人脸特征分析服务，参考帖子如何创建一个webapi应用：http://bbs.xfyun.cn/forum.php?mod=viewthread&tid=36481)
APPID = "5e844085"
# 接口密钥(webapi类型应用开通人脸特征分析服务后，控制台--我的应用---人脸特征分析---服务的apikey)
API_KEY = "f0d9fd8e7026e127e52adc87d528ac76"
ImageName = "second.jpg"
ImageUrl = "http://newmedia.nfu.edu.cn/wcy/wp-content/uploads/2018/04/post_20180424__NFU_DoraHacks_imoji%E5%9B%A2%E9%98%9F.jpg"
# 图片数据可以通过两种方式上传，第一种在请求头设置image_url参数，第二种将图片二进制数据写入请求体中。若同时设置，以第一种为准。
# 此demo使用第一种方式进行上传图片地址，如果想使用第二种方式，将图片二进制数据写入请求体即可。
# FilePath = r"C:\Users\Admin\Desktop\1539656523.png"


def getHeader(image_name, image_url=None):
    curTime = str(int(time.time()))
    param = "{\"image_name\":\"" + image_name + "\",\"image_url\":\"" + image_url + "\"}"
    paramBase64 = base64.b64encode(param.encode('utf-8'))
    tmp = str(paramBase64, 'utf-8')

    m2 = hashlib.md5()
    m2.update((API_KEY + curTime + tmp).encode('utf-8'))
    checkSum = m2.hexdigest()

    header = {
        'X-CurTime': curTime,
        'X-Param': paramBase64,
        'X-Appid': APPID,
        'X-CheckSum': checkSum,
    }
    return header


# def getBody(filePath):
#     binfile = open(filePath, 'rb')
#     data = binfile.read()
#     return data


r = requests.post(URL, headers=getHeader(ImageName, ImageUrl))
result=r.json()
#pprint.pprint(result)

results=int(result['data']['fileList'][0]['label'])
#labels=result['data']['fileList'][0]['labels']
results
age={
0:'0-1', 
1:'2-5', 
2:'6-10',  
3:'11-15', 
4:'16-20', 
5:'21-25', 
6:'31-40',
7:'41-50', 
8:'51-60',
9:'61-80',
10:'80以上',
11:'其他',
12:'26-30',    
}
if results in age.keys():
    if 11 == results:
        print('这个人的年龄不清楚')
    else:        
        print('这个人大约在',age[results],'岁')


# ## 人物性别

# In[283]:


# -*- coding: utf-8 -*-
import requests
import time
import hashlib
import base64
""" 
  人脸特征分析性别WebAPI接口调用示例接口文档(必看)：https://doc.xfyun.cn/rest_api/%E4%BA%BA%E8%84%B8%E7%89%B9%E5%BE%81%E5%88%86%E6%9E%90-%E6%80%A7%E5%88%AB.html
  图片属性：png、jpg、jpeg、bmp、tif图片大小不超过800k
  (Very Important)创建完webapi应用添加服务之后一定要设置ip白名单，找到控制台--我的应用--设置ip白名单，如何设置参考：http://bbs.xfyun.cn/forum.php?mod=viewthread&tid=41891
  错误码链接：https://www.xfyun.cn/document/error-code (code返回错误码时必看)
  @author iflytek
"""
# 人脸特征分析性别webapi接口地址
URL = "http://tupapi.xfyun.cn/v1/sex"

# 应用ID  (必须为webapi类型应用，并人脸特征分析服务，参考帖子如何创建一个webapi应用：http://bbs.xfyun.cn/forum.php?mod=viewthread&tid=36481)
APPID = "5e844085"
# 接口密钥(webapi类型应用开通人脸特征分析服务后，控制台--我的应用---人脸特征分析---服务的apikey)
API_KEY = "f0d9fd8e7026e127e52adc87d528ac76"
ImageName = "second.jpg"
#图片数据可以通过两种方式上传，第一种在请求头设置image_url参数，第二种将图片二进制数据写入请求体中。若同时设置，以第一种为准。
#此demo使用第一种方式进行上传图片地址，如果想使用第二种方式，将图片二进制数据写入请求体即可。
ImageUrl = "https://p2.ssl.qhimgs1.com/bdr/326__/t01c26515f619902f48.jpg"
# FilePath = r"C:\Users\Admin\Desktop\1539656523.png"
def getHeader(image_name, image_url=None):
    curTime = str(int(time.time()))
    param = "{\"image_name\":\"" + image_name + "\",\"image_url\":\"" + image_url + "\"}"
    paramBase64 = base64.b64encode(param.encode('utf-8'))
    tmp = str(paramBase64, 'utf-8')

    m2 = hashlib.md5()
    m2.update((API_KEY + curTime + tmp).encode('utf-8'))
    checkSum = m2.hexdigest()

    header = {
        'X-CurTime': curTime,
        'X-Param': paramBase64,
        'X-Appid': APPID,
        'X-CheckSum': checkSum,
    }
    return header


# def getBody(filePath):
#     binfile = open(filePath, 'rb')
#     data = binfile.read()
#     return data


r = requests.post(URL, headers=getHeader(ImageName, ImageUrl))
result=r.json()
results=result['data']['fileList'][0]['label']
sex={
    0:'男人',
    1:'女人',
    2:'难以辨认',
    3:'多人'
}
if int(results) in sex.keys():
    e = int(results)
    print('图中人物是',sex[e])


# ## 人物表情

# In[281]:


# -*- coding: utf-8 -*-
import requests
import time
import hashlib
import base64
import pprint 
""" 
  人脸特征分析表情WebAPI接口调用示例接口文档(必看)：https://doc.xfyun.cn/rest_api/%E4%BA%BA%E8%84%B8%E7%89%B9%E5%BE%81%E5%88%86%E6%9E%90-%E8%A1%A8%E6%83%85.html
  图片属性：png、jpg、jpeg、bmp、tif图片大小不超过800k
  (Very Important)创建完webapi应用添加服务之后一定要设置ip白名单，找到控制台--我的应用--设置ip白名单，如何设置参考：http://bbs.xfyun.cn/forum.php?mod=viewthread&tid=41891
  错误码链接：https://www.xfyun.cn/document/error-code (code返回错误码时必看)
  @author iflytek
"""
# 人脸特征分析表情webapi接口地址
URL = "http://tupapi.xfyun.cn/v1/expression"
# 应用ID  (必须为webapi类型应用，并人脸特征分析服务，参考帖子如何创建一个webapi应用：http://bbs.xfyun.cn/forum.php?mod=viewthread&tid=36481)
APPID = "5e844085"
# 接口密钥(webapi类型应用开通人脸特征分析服务后，控制台--我的应用---人脸特征分析---服务的apikey)
API_KEY = "f0d9fd8e7026e127e52adc87d528ac76"
ImageName = "second.jpg"
ImageUrl = "http://newmedia.nfu.edu.cn/wcy/wp-content/uploads/2018/04/post_20180424__NFU_DoraHacks_imoji%E5%9B%A2%E9%98%9F.jpg"
# FilePath = r"C:\Users\Admin\Desktop\1539656523.png"
# 图片数据可以通过两种方式上传，第一种在请求头设置image_url参数，第二种将图片二进制数据写入请求体中。若同时设置，以第一种为准。
# 此demo使用第一种方式进行上传图片地址，如果想使用第二种方式，将图片二进制数据写入请求体即可。
def getHeader(image_name, image_url=None):
    curTime = str(int(time.time()))
    param = "{\"image_name\":\"" + image_name + "\",\"image_url\":\"" + image_url + "\"}"
    paramBase64 = base64.b64encode(param.encode('utf-8'))
    tmp = str(paramBase64, 'utf-8')
    m2 = hashlib.md5()
    m2.update((API_KEY + curTime + tmp).encode('utf-8'))
    checkSum = m2.hexdigest()

    header = {
        'X-CurTime': curTime,
        'X-Param': paramBase64,
        'X-Appid': APPID,
        'X-CheckSum': checkSum,
    }
    return header


# def getBody(filePath):
#     binfile = open(filePath, 'rb')
#     data = binfile.read()
#     return data


r = requests.post(URL, headers=getHeader(ImageName, ImageUrl))
result=r.json()
results=result['data']['fileList'][0]['label']
expression={
    0:'其他(非人脸表情图片)',
    1:'其他表情',
    2:'喜悦',
    3:'愤怒',
    4:'悲伤',
    5:'惊恐',
    6:'厌恶',
    7:'中性'
}
if int(results) in expression.keys():
    e=int(results)
    print('图中人物的表情是',expression[e])


# In[285]:


from IPython.core.display import display,HTML   #使用ipython展示模块
display(HTML('<img src="http://i1.go2yd.com/image.php?url=0KcZIhhL4T" alt="">'))


# ## 人物年龄

# In[286]:


# -*- coding: utf-8 -*-
import requests
import time
import hashlib
import base64
import pprint
""" 
  人脸特征分析年龄WebAPI接口调用示例接口文档(必看)：https://doc.xfyun.cn/rest_api/%E4%BA%BA%E8%84%B8%E7%89%B9%E5%BE%81%E5%88%86%E6%9E%90-%E5%B9%B4%E9%BE%84.html
  图片属性：png、jpg、jpeg、bmp、tif图片大小不超过800k
  (Very Important)创建完webapi应用添加服务之后一定要设置ip白名单，找到控制台--我的应用--设置ip白名单，如何设置参考：http://bbs.xfyun.cn/forum.php?mod=viewthread&tid=41891
  错误码链接：https://www.xfyun.cn/document/error-code (code返回错误码时必看)
  @author iflytek
"""
# 人脸特征分析年龄webapi接口地址
URL = "http://tupapi.xfyun.cn/v1/age"
# 应用ID  (必须为webapi类型应用，并人脸特征分析服务，参考帖子如何创建一个webapi应用：http://bbs.xfyun.cn/forum.php?mod=viewthread&tid=36481)
APPID = "5e844085"
# 接口密钥(webapi类型应用开通人脸特征分析服务后，控制台--我的应用---人脸特征分析---服务的apikey)
API_KEY = "f0d9fd8e7026e127e52adc87d528ac76"
ImageName = "thrid.jpg"
ImageUrl = "http://i1.go2yd.com/image.php?url=0KcZIhhL4T"
# 图片数据可以通过两种方式上传，第一种在请求头设置image_url参数，第二种将图片二进制数据写入请求体中。若同时设置，以第一种为准。
# 此demo使用第一种方式进行上传图片地址，如果想使用第二种方式，将图片二进制数据写入请求体即可。
# FilePath = r"C:\Users\Admin\Desktop\1539656523.png"


def getHeader(image_name, image_url=None):
    curTime = str(int(time.time()))
    param = "{\"image_name\":\"" + image_name + "\",\"image_url\":\"" + image_url + "\"}"
    paramBase64 = base64.b64encode(param.encode('utf-8'))
    tmp = str(paramBase64, 'utf-8')

    m2 = hashlib.md5()
    m2.update((API_KEY + curTime + tmp).encode('utf-8'))
    checkSum = m2.hexdigest()

    header = {
        'X-CurTime': curTime,
        'X-Param': paramBase64,
        'X-Appid': APPID,
        'X-CheckSum': checkSum,
    }
    return header


# def getBody(filePath):
#     binfile = open(filePath, 'rb')
#     data = binfile.read()
#     return data


r = requests.post(URL, headers=getHeader(ImageName, ImageUrl))
result=r.json()
#pprint.pprint(result)

results=int(result['data']['fileList'][0]['label'])
#labels=result['data']['fileList'][0]['labels']
results
age={
0:'0-1', 
1:'2-5', 
2:'6-10',  
3:'11-15', 
4:'16-20', 
5:'21-25', 
6:'31-40',
7:'41-50', 
8:'51-60',
9:'61-80',
10:'80以上',
11:'其他',
12:'26-30',    
}
if results in age.keys():
    if 11 == results:
        print('这个人的年龄不清楚')
    else:        
        print('这个人大约在',age[results],'岁')


# ## 人物性别

# In[287]:


# -*- coding: utf-8 -*-
import requests
import time
import hashlib
import base64
""" 
  人脸特征分析性别WebAPI接口调用示例接口文档(必看)：https://doc.xfyun.cn/rest_api/%E4%BA%BA%E8%84%B8%E7%89%B9%E5%BE%81%E5%88%86%E6%9E%90-%E6%80%A7%E5%88%AB.html
  图片属性：png、jpg、jpeg、bmp、tif图片大小不超过800k
  (Very Important)创建完webapi应用添加服务之后一定要设置ip白名单，找到控制台--我的应用--设置ip白名单，如何设置参考：http://bbs.xfyun.cn/forum.php?mod=viewthread&tid=41891
  错误码链接：https://www.xfyun.cn/document/error-code (code返回错误码时必看)
  @author iflytek
"""
# 人脸特征分析性别webapi接口地址
URL = "http://tupapi.xfyun.cn/v1/sex"

# 应用ID  (必须为webapi类型应用，并人脸特征分析服务，参考帖子如何创建一个webapi应用：http://bbs.xfyun.cn/forum.php?mod=viewthread&tid=36481)
APPID = "5e844085"
# 接口密钥(webapi类型应用开通人脸特征分析服务后，控制台--我的应用---人脸特征分析---服务的apikey)
API_KEY = "f0d9fd8e7026e127e52adc87d528ac76"
ImageName = "thrid.jpg"
#图片数据可以通过两种方式上传，第一种在请求头设置image_url参数，第二种将图片二进制数据写入请求体中。若同时设置，以第一种为准。
#此demo使用第一种方式进行上传图片地址，如果想使用第二种方式，将图片二进制数据写入请求体即可。
ImageUrl = "http://i1.go2yd.com/image.php?url=0KcZIhhL4T"
# FilePath = r"C:\Users\Admin\Desktop\1539656523.png"
def getHeader(image_name, image_url=None):
    curTime = str(int(time.time()))
    param = "{\"image_name\":\"" + image_name + "\",\"image_url\":\"" + image_url + "\"}"
    paramBase64 = base64.b64encode(param.encode('utf-8'))
    tmp = str(paramBase64, 'utf-8')

    m2 = hashlib.md5()
    m2.update((API_KEY + curTime + tmp).encode('utf-8'))
    checkSum = m2.hexdigest()

    header = {
        'X-CurTime': curTime,
        'X-Param': paramBase64,
        'X-Appid': APPID,
        'X-CheckSum': checkSum,
    }
    return header


# def getBody(filePath):
#     binfile = open(filePath, 'rb')
#     data = binfile.read()
#     return data


r = requests.post(URL, headers=getHeader(ImageName, ImageUrl))
result=r.json()
results=result['data']['fileList'][0]['label']
sex={
    0:'男人',
    1:'女人',
    2:'难以辨认',
    3:'多人'
}
if int(results) in sex.keys():
    e = int(results)
    print('图中人物是',sex[e])


# ## 人物心情

# In[288]:


# -*- coding: utf-8 -*-
import requests
import time
import hashlib
import base64
import pprint 
""" 
  人脸特征分析表情WebAPI接口调用示例接口文档(必看)：https://doc.xfyun.cn/rest_api/%E4%BA%BA%E8%84%B8%E7%89%B9%E5%BE%81%E5%88%86%E6%9E%90-%E8%A1%A8%E6%83%85.html
  图片属性：png、jpg、jpeg、bmp、tif图片大小不超过800k
  (Very Important)创建完webapi应用添加服务之后一定要设置ip白名单，找到控制台--我的应用--设置ip白名单，如何设置参考：http://bbs.xfyun.cn/forum.php?mod=viewthread&tid=41891
  错误码链接：https://www.xfyun.cn/document/error-code (code返回错误码时必看)
  @author iflytek
"""
# 人脸特征分析表情webapi接口地址
URL = "http://tupapi.xfyun.cn/v1/expression"
# 应用ID  (必须为webapi类型应用，并人脸特征分析服务，参考帖子如何创建一个webapi应用：http://bbs.xfyun.cn/forum.php?mod=viewthread&tid=36481)
APPID = "5e844085"
# 接口密钥(webapi类型应用开通人脸特征分析服务后，控制台--我的应用---人脸特征分析---服务的apikey)
API_KEY = "f0d9fd8e7026e127e52adc87d528ac76"
ImageName = "thrid.jpg"
ImageUrl = "http://i1.go2yd.com/image.php?url=0KcZIhhL4T"
# FilePath = r"C:\Users\Admin\Desktop\1539656523.png"
# 图片数据可以通过两种方式上传，第一种在请求头设置image_url参数，第二种将图片二进制数据写入请求体中。若同时设置，以第一种为准。
# 此demo使用第一种方式进行上传图片地址，如果想使用第二种方式，将图片二进制数据写入请求体即可。
def getHeader(image_name, image_url=None):
    curTime = str(int(time.time()))
    param = "{\"image_name\":\"" + image_name + "\",\"image_url\":\"" + image_url + "\"}"
    paramBase64 = base64.b64encode(param.encode('utf-8'))
    tmp = str(paramBase64, 'utf-8')
    m2 = hashlib.md5()
    m2.update((API_KEY + curTime + tmp).encode('utf-8'))
    checkSum = m2.hexdigest()

    header = {
        'X-CurTime': curTime,
        'X-Param': paramBase64,
        'X-Appid': APPID,
        'X-CheckSum': checkSum,
    }
    return header


# def getBody(filePath):
#     binfile = open(filePath, 'rb')
#     data = binfile.read()
#     return data


r = requests.post(URL, headers=getHeader(ImageName, ImageUrl))
result=r.json()
results=result['data']['fileList'][0]['label']
expression={
    0:'其他(非人脸表情图片)',
    1:'其他表情',
    2:'喜悦',
    3:'愤怒',
    4:'悲伤',
    5:'惊恐',
    6:'厌恶',
    7:'中性'
}
if int(results) in expression.keys():
    e=int(results)
    print('图中人物的表情是',expression[e])


# ## 颜值评分

# ### 以下面这张图片为例子
# ![01](https://p3.ssl.qhimgs1.com/bdr/326__/t01a9f7f11254e3cffd.jpg)

# In[308]:


# 1、先导入为们需要的模块
import requests


api_secret = "3r99_ruQTS-_p8nnBh2hayEVmWvow61K"
# 2、输入我们API_Key
api_key = 'VZWbKT6KtROk-qVCNlsnAUAL9obMVtrv'  # Replace with a valid Subscription Key here.


# 3、目标url
# 这里也可以使用本地图片 例如：filepath ="image/tupian.jpg"
BASE_URL = ' https://api-cn.faceplusplus.com/facepp/v1/facialfeatures' 
img_url = 'https://p3.ssl.qhimgs1.com/bdr/326__/t01a9f7f11254e3cffd.jpg'

# 4、沿用API文档的示范代码,准备我们的headers和图片(数据)

headers = {
    'Content-Type': 'application/json',
}

# 5、准备symbol ? 后面的数据

payload = {
    "image_url":img_url,
    'api_key': api_key,
    'api_secret': api_secret,
    'return_attributes':'five_eyes', 
}


# In[309]:


#  6、requests发送我们请求
r = requests.post(BASE_URL, params=payload, headers=headers)


# In[310]:


r.status_code


# In[311]:


r.content


# In[312]:


results = r.json()
results


# # 总结

# 1.总的来说，微软azure的识别是最准确的，识别最差的是科大讯飞。
# 
# 2.微软azure和face++都能迅速识别出图片人物的年龄、性别、表情，对于单人照片和多人照片的
# 识别都很快，出来的数据可以轻易地制成可视化表格。
# 
# 3.科大讯飞对于人物图片的识别很慢而且对于多人图片，此人脸识别功能是十分鸡肋的，不仅要分别识别
# 还不能直观地测出人物的年龄、性别、表情。整体落后微软azure和face++一大步。
# 
# 4.微软azure和face++都能直接测出年龄数值，而科大讯飞只能测出一个范围，不够实用。

# In[ ]:




